﻿using System;
using System.Collections.Generic;
using System.Web;
using FancyIdea.PingShui.Core.Dal;
using FancyIdea.PingShui.Core.DbHelper;
using System.Data;
using FancyIdea.PingShui.Core.Util;
using FancyIdea.PingShui.Core.Model;

namespace FancyIdea.PingShui.Core.Bll
{
    /// <summary>
    /// 评税信息 的摘要说明
    /// </summary>
    public class 评税信息 : HttpHandler
    {
        private void Save()
        {
            if (!CheckPower(CommUtil.GetValueByName(typeof(权限列表),
               权限列表.纳税户电子评税.ToString()).ToString()))
            {
                WriteReturnXml(-128, "无操作权限", null);
                return;
            }

            //判断操作员
            UserList users = Session["users"] as UserList;
            if (users == null || users.Count < 1)
            {
                WriteReturnXml(-127, "没有操作员信息", null);
                return;
            }

            //判断从业人员
            string[] 职业 = GetStringsValue("职业");
            if (职业 == null || 职业.Length < 1)
            {
                WriteReturnXml(-127, "没有从业人员信息", null);
                return;
            }

            string[] 人数 = GetStringsValue("人数");
            string[] 工资 = GetStringsValue("工资");

            Dal.评税信息 info = new Dal.评税信息();
            info.纳税人代码 = GetStringValue("纳税人代码");
            info.单位面积装修折旧费 = GetFloatValue("单位面积装修折旧费");
            info.单位面积租金 = GetFloatValue("单位面积租金");
            info.电费 = GetFloatValue("电费");
            info.电子评税额 = GetFloatValue("电子评税额");
            info.经营面积 = GetFloatValue("经营面积");
            info.经营系数 = GetFloatValue("经营系数");
            info.每月平均采购成本 = GetFloatValue("每月平均采购成本");
            info.其他费用 = GetFloatValue("其他费用");
            info.燃气费 = GetFloatValue("燃气费");
            info.设备定额 = GetFloatValue("设备定额");
            info.设备数量 = GetInt32Value("设备数量");
            info.水费 = GetFloatValue("水费");
            info.物业管理费 = GetFloatValue("物业管理费");
            info.执行定额 = GetFloatValue("执行定额");
            info.自报营业额 = GetFloatValue("自报营业额");

            info.操作时间 = DateTime.Now;
            info.定额截止日期 = GetDateTimeValue("定额截止日期");
            info.定额执行日期 = GetDateTimeValue("定额执行日期");

            if (info.定额截止日期 == DateTime.MinValue)
                info.定额截止日期 = DateTime.Now.Date;
            if (info.定额执行日期 == DateTime.MinValue)
                info.定额执行日期 = DateTime.Now.Date;

            if (info.定额截止日期 <= info.定额执行日期)
            {
                WriteReturnXml(-1, "出现错误，定额截止日期必须大于定额执行日期", null);
            }

            info.评税状态 = 评税信息操作.CalcState(info.纳税人代码, info.单位面积装修折旧费, info.单位面积租金
                , info.水费, info.电费, info.燃气费, info.设备数量, info.设备定额);

            //if (!评税信息操作.CheckAssessment(info.纳税人代码))//表示添加
            //{
            if (评税信息操作.AddAssessment(info))
            {
                评税信息操作.AddOperator(info.纳税人代码, users.GetCode(), info.操作时间);
                评税信息操作.AddEmployees(info.纳税人代码, 职业, 人数, 工资, info.操作时间);
                //修改基本信息表的税收定额
                基本信息操作.UpdateMoney(info.纳税人代码,info.执行定额);
                WriteReturnXml(0, "", null);
            }
            else
            {
                WriteReturnXml(-1, "添加失败", null);
            }
            //}
            //else
            //{
            //    if (评税信息操作.UpdateAssessment(info))
            //    {
            //        评税信息操作.AddOperator(info.纳税人代码, users.GetCode());
            //        评税信息操作.AddEmployees(info.纳税人代码, 职业, 人数, 工资);
            //        WriteReturnXml(0, "", null);
            //    }
            //    else
            //    {
            //        WriteReturnXml(-1, "修改失败", null);
            //    }
            //}
        }

        private void List()
        {
            if (!CheckPower(CommUtil.GetValueByName(typeof(权限列表),
               权限列表.纳税户电子评税.ToString()).ToString()))
            {
                WriteReturnXml(-128, "无操作权限", null);
                return;
            }
            SimpleQueryBuilder SqlBuilder
           = new SimpleQueryBuilder()
           {
               FieldsString = @"a.*,g.纳税人名称,b.税务机关名称,c.行业名称,d.行业细目名称,
e.征收项目名称 as 征收项目,f.征收品目名称 as 征收品目",
               FromString = @"from 评税信息表 a 
left join 基本信息表 g on g.纳税人代码=a.纳税人代码
left join 税务机关表 b on b.税务机关代码=g.税务机关代码 
left join 行业表 c on c.行业代码=g.行业代码 
left join 行业细目表 d on d.行业细目代码=g.行业细目代码 
left join 征收项目表 e on e.征收项目代码=g.征收项目代码 
left join 征收品目表 f on f.征收品目代码=g.征收品目代码",
               PageOrderString = "order by a.纳税人代码 desc",
               FieldsStringForCount = "count(a.纳税人代码) as count"
           };
            List<string> con = new List<string>();
            con.Add("a.纳税人代码 like '%" + GetStringValue("纳税人代码") + "%'");
            SqlBuilder.Conditions = con.ToArray();
            int page = GetInt32Value("page");
            string sql = SqlBuilder.BuildQuerySql(page, Const.dataPerPage);
            string sql1 = SqlBuilder.BuildQueryStatisticSql();
            DataTable table = CmdUtil.ExcuteDataTable(sql);
            object o = CmdUtil.ExcuteScalar(sql1);
            int count = int.Parse(o == null ? "0" : o.ToString());
            int total = count % Const.dataPerPage == 0 ?
                count / Const.dataPerPage : (count / Const.dataPerPage) + 1;
            //XmlUtil.WriteListXml(0, "成功", count, Const.dataPerPage, total, page, table, "评税信息.xml");
            WriteListXml(0, "成功", count, Const.dataPerPage, total, page, table);
        }

        private void ListSearch()
        {
            if (!CheckPower(CommUtil.GetValueByName(typeof(权限列表),
               权限列表.电子评税纳税户查询.ToString()).ToString()))
            {
                WriteReturnXml(-128, "无操作权限", null);
                return;
            }
            SimpleQueryBuilder SqlBuilder
           = new SimpleQueryBuilder()
           {
               FieldsString = @"a.*,g.纳税人名称,b.税务机关名称,c.行业名称,d.行业细目名称,
e.征收项目名称 as 征收项目,f.征收品目名称 as 征收品目",
               FromString = @"from 评税信息表 a 
left join 基本信息表 g on g.纳税人代码=a.纳税人代码
left join 税务机关表 b on b.税务机关代码=g.税务机关代码 
left join 行业表 c on c.行业代码=g.行业代码 
left join 行业细目表 d on d.行业细目代码=g.行业细目代码 
left join 征收项目表 e on e.征收项目代码=g.征收项目代码 
left join 征收品目表 f on f.征收品目代码=g.征收品目代码",
               PageOrderString = "order by a.纳税人代码 desc",
               FieldsStringForCount = "count(a.纳税人代码) as count"
           };
            List<string> con = new List<string>();
            string name = GetStringValue("纳税人名称");
            string code = GetStringValue("纳税人代码");
            if (string.IsNullOrEmpty(name) && string.IsNullOrEmpty(code))
            {
                WriteListXml(0, "成功", 0, 0, 0, 0, null);
                return;
            }
            con.Add("g.纳税人名称 like '%" + name + "%'");
            con.Add("a.纳税人代码 like '%" + code + "%'");
            con.Add("a.评税状态=" + (int)评税状态.正常 + "");
            SqlBuilder.Conditions = con.ToArray();
            int page = GetInt32Value("page");
            string sql = SqlBuilder.BuildQuerySql(page, Const.dataPerPage);
            string sql1 = SqlBuilder.BuildQueryStatisticSql();
            DataTable table = CmdUtil.ExcuteDataTable(sql);
            object o = CmdUtil.ExcuteScalar(sql1);
            int count = int.Parse(o == null ? "0" : o.ToString());
            int total = count % Const.dataPerPage == 0 ?
                count / Const.dataPerPage : (count / Const.dataPerPage) + 1;
            //XmlUtil.WriteListXml(0, "成功", count, Const.dataPerPage, total, page, table, "评税信息.xml");
            WriteListXml(0, "成功", count, Const.dataPerPage, total, page, table);
        }

        private void ListSearchException()
        {
            if (!CheckPower(CommUtil.GetValueByName(typeof(权限列表),
               权限列表.电子评税异常查询.ToString()).ToString()))
            {
                WriteReturnXml(-128, "无操作权限", null);
                return;
            }
            SimpleQueryBuilder SqlBuilder
           = new SimpleQueryBuilder()
           {
               FieldsString = @"a.*,g.纳税人名称,b.税务机关名称,c.行业名称,d.行业细目名称,
e.征收项目名称 as 征收项目,f.征收品目名称 as 征收品目",
               FromString = @"from 评税信息表 a 
left join 基本信息表 g on g.纳税人代码=a.纳税人代码
left join 税务机关表 b on b.税务机关代码=g.税务机关代码 
left join 行业表 c on c.行业代码=g.行业代码 
left join 行业细目表 d on d.行业细目代码=g.行业细目代码 
left join 征收项目表 e on e.征收项目代码=g.征收项目代码 
left join 征收品目表 f on f.征收品目代码=g.征收品目代码",
               PageOrderString = "order by a.纳税人代码 desc",
               FieldsStringForCount = "count(a.纳税人代码) as count"
           };
            List<string> con = new List<string>();
            string name = GetStringValue("纳税人名称");
            string code = GetStringValue("纳税人代码");
            if (string.IsNullOrEmpty(name) && string.IsNullOrEmpty(code))
            {
                WriteListXml(0, "成功", 0, 0, 0, 0, null);
                return;
            }
            con.Add("g.纳税人名称 like '%" + name + "%'");
            con.Add("a.纳税人代码 like '%" + code + "%'");
            con.Add("a.评税状态=" + (int)评税状态.异常 + "");
            SqlBuilder.Conditions = con.ToArray();
            int page = GetInt32Value("page");
            string sql = SqlBuilder.BuildQuerySql(page, Const.dataPerPage);
            string sql1 = SqlBuilder.BuildQueryStatisticSql();
            DataTable table = CmdUtil.ExcuteDataTable(sql);
            object o = CmdUtil.ExcuteScalar(sql1);
            int count = int.Parse(o == null ? "0" : o.ToString());
            int total = count % Const.dataPerPage == 0 ?
                count / Const.dataPerPage : (count / Const.dataPerPage) + 1;
            //XmlUtil.WriteListXml(0, "成功", count, Const.dataPerPage, total, page, table, "评税信息.xml");
            WriteListXml(0, "成功", count, Const.dataPerPage, total, page, table);
        }

        private void Get()
        {
            string 纳税人代码 = GetStringValue("纳税人代码");
            if (string.IsNullOrEmpty(纳税人代码))
            {
                WriteReturnXml(-1, "参数传入错误", null);
                return;
            }
            DataRow row = 评税信息操作.GetAssessmentRow(纳税人代码);
            if (row != null)
            {
                WriteReturnXml(0, "", row.Table);
            }
            else
            {
                WriteReturnXml(-1, "未查询到数据", null);
            }
        }

        private void GetAllInfo()
        {
            string 纳税人代码 = GetStringValue("纳税人代码");
            DateTime 操作时间 = GetDateTimeValue("操作时间");
            if (string.IsNullOrEmpty(纳税人代码))
            {
                WriteReturnXml(-1, "参数传入错误", null);
                return;
            }
            DataRow baseInfoRow = 基本信息操作.GetBaseInfoRow(纳税人代码);
            if (baseInfoRow == null)
            {
                WriteReturnXml(-1, "未查询到数据", null);
                return;
            }
            DataTable table = new DataTable();
            table.Rows.Add();
            foreach (DataColumn col in baseInfoRow.Table.Columns)
            {
                table.Columns.Add(col.ColumnName);
                table.Rows[0][col.ColumnName] = baseInfoRow[col.ColumnName].ToString();
            }
            if (操作时间 != DateTime.MinValue)
            {
                DataRow assInfoRow = 评税信息操作.GetAssessmentRow(纳税人代码);
                if (assInfoRow != null)
                {
                    foreach (DataColumn col in assInfoRow.Table.Columns)
                    {
                        if (table.Columns.IndexOf(col.ColumnName) >= 0)
                        {
                            table.Columns.Add(col.ColumnName + "1");
                            table.Rows[0][col.ColumnName + "1"] = assInfoRow[col.ColumnName].ToString();
                        }
                        else
                        {
                            table.Columns.Add(col.ColumnName);
                            table.Rows[0][col.ColumnName] = assInfoRow[col.ColumnName].ToString();
                        }
                    }
                }
            }
            WriteReturnXml(0, "", table);
        }

        private void Delete()
        {
            if (!CheckPower(CommUtil.GetValueByName(typeof(权限列表),
               权限列表.纳税户电子评税.ToString()).ToString()))
            {
                WriteReturnXml(-128, "无操作权限", null);
                return;
            }
            string 纳税人代码 = GetStringValue("纳税人代码");
            if (string.IsNullOrEmpty("纳税人代码"))
            {
                WriteReturnXml(-1, "参数传入错误", null);
                return;
            }
            if (评税信息操作.DeleteAssessment(纳税人代码))
            {
                WriteReturnXml(0, "", null);
            }
            else
            {
                WriteReturnXml(-1, "删除失败", null);
            }
        }

        private void DeleteMulti()
        {
            if (!CheckPower(CommUtil.GetValueByName(typeof(权限列表),
               权限列表.纳税户电子评税.ToString()).ToString()))
            {
                WriteReturnXml(-128, "无操作权限", null);
                return;
            }
            string[] 纳税人代码 = GetStringsValue("纳税人代码");
            if (评税信息操作.DeleteAssessment(纳税人代码))
            {
                WriteReturnXml(0, "", null);
            }
            else
            {
                WriteReturnXml(-1, "删除失败", null);
            }
        }

        private void GetEmployee()
        {
            string 纳税人代码 = GetStringValue("纳税人代码");
            DateTime 操作时间 = GetDateTimeValue("操作时间");
            if (string.IsNullOrEmpty(纳税人代码))
            {
                WriteReturnXml(-127, "参数传入错误", null);
                return;
            }
            DataTable table = 评税信息操作.GetEmployees(纳税人代码, 操作时间);
            WriteReturnXml(0, "", table);
        }

        private void GetAlarmInfo()
        {
            string 行业细目代码 = GetStringValue("行业细目代码");
            string 纳税人代码 = GetStringValue("纳税人代码");
            if (string.IsNullOrEmpty(行业细目代码))
            {
                WriteReturnXml(-127, "参数传入错误", null);
                return;
            }
            //DataTable table = 评税信息操作.GetAlarmInfoByHyxm(行业细目代码);
            DataTable table = 评税信息操作.GetAlarmInfo(纳税人代码);
            DataTable table1 = 评税信息操作.GetZhiYeByHyxm(行业细目代码);
            if (table != null && table.Rows.Count > 0)
            {
                WriteReturnXml(0, "", table.Rows[0], table1);
            }
            else
            {
                WriteReturnXml(-1, "没有查询到相关预警信息", null);
            }
        }
    }
}